home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / C / Applications / MacPerl 5.0.3 / MacPerl Source ƒ / MacPerl5 / Demo / UPPDB < prev    next >
Encoding:
Text File  |  1994-07-09  |  16.0 KB  |  13 lines  |  [TEXT/MPS ]

  1. a· (4ïn}„"¸∫±-&    QI:0
  2. Ù
  3. À
  4. «
  5. • È ‰ « ∂ ô î ` V = * : 3 , $ 
  6. œ files (necessary to flush buffers)
  7.     // This implementation is not nice, but who cares ?
  8.     // In case you wonder, _iob is defined in <stdio.h>
  9.  
  10.     for (i = 0; _iob+i<_lastbuf; i++)
  11.         fflush(_iob+i);
  12.  
  13.     for (i = 0; _iob+i<_lastbuf; i++)
  14.         fclose(_iob+i);
  15.  
  16.     // Close all files
  17.  
  18.     for (i = 0; i<FD_SETSIZE; ++i)
  19.         close(i);
  20.  
  21.     while (PerlExitCnt)
  22.         PerlExitFn[--PerlExitCnt]();
  23.  
  24.     UseResFile(gAppFile);
  25.     reenter();
  26.     
  27.     open("Dev:Console", O_RDONLY);
  28.     open("Dev:Console", O_WRONLY);
  29.     open("Dev:Console", O_WRONLY);
  30.     
  31.     fopen("Dev:Console", "r");
  32.     fopen("Dev:Console", "w");
  33.     fopen("Dev:Console", "w");
  34. }
  35.  
  36. enum {
  37.     extractDone            = -4,
  38.     extractDir            = -3,
  39.     extractCpp            = -2,
  40.     extractDebug         = -1
  41. };
  42.  
  43. typedef char * (*ArgExtractor)(void * data, int index);
  44.  
  45. pascal void RunScript(ArgExtractor extractor, void * data)
  46. {
  47.     int        ArgC;
  48.     short        resFile;
  49.     Handle    libs;
  50.     Str255    lib;
  51.     char    *    res;
  52.     int        i;
  53.  
  54.     PtrToHand("PERLLIB", &libs, 8);
  55.     
  56.     resFile = CurResFile();
  57.     UseResFile(gPrefsFile);
  58.     
  59.     for (ArgC = 1; ; ++ArgC) {
  60.         GetIndString(lib, LibraryPaths, ArgC);
  61.         
  62.         if (!lib[0])
  63.             break;
  64.             
  65.         if (ArgC > 1)
  66.             PtrAndHand(",", libs, 1);
  67.         
  68.         PtrAndHand(lib+1, libs, lib[0]);
  69.     }
  70.     
  71.     UseResFile(resFile);
  72.     
  73.     if (PerlEnviron[1])
  74.         DisposePtr(PerlEnviron[1]);
  75.     
  76.     PerlEnviron[1] = NewPtr(GetHandleSize(libs)+1);
  77.     BlockMove(*libs, PerlEnviron[1], GetHandleSize(libs));
  78.     PerlEnviron[1][GetHandleSize(libs)] = 0;
  79.     DisposeHandle(libs);
  80.     
  81.     ArgC = 1;
  82.     
  83.     {
  84.         char        path[256];
  85.     
  86.         strcpy(path, extractor(data, extractDir));
  87.         chdir(path);
  88.     }
  89.     
  90.     if ((res = extractor(data, extractDebug)) && *res == 'y')
  91.         PerlArgs[ArgC++] = "-d";
  92.  
  93.     if ((res = extractor(data, extractCpp)) && *res == 'y')
  94.         PerlArgs[ArgC++] = "-P";
  95.  
  96.     if (res = extractor(data, 1)) {
  97.         if (gPerlPrefs.checkType && !gPseudoFile) 
  98.             PerlArgs[ArgC++] = "-x";
  99.         
  100.         PerlArgs[ArgC++] = res;
  101.     
  102.         for (i=2; PerlArgs[ArgC] = extractor(data, i); ++i, ++ArgC);
  103.     }
  104.     
  105.     extractor(data, extractDone);
  106.     
  107.     UseResFile(gAppFile);
  108.     
  109.     gRunningPerl     =  true;
  110.     PerlQuit            =    0;
  111.     ShowWindowStatus();
  112.     
  113.     signal(SIGINT, exit);
  114.     
  115.     if (!setjmp(ExitPerl))             
  116.         run_perl(ArgC, PerlArgs, PerlEnviron);
  117.     
  118.     CleanupPerl();
  119.     gRunningPerl = false;
  120.     
  121.     if (gScriptFile != gAppFile) {
  122.         CloseResFile(gScriptFile);
  123.         
  124.         gScriptFile = gAppFile;
  125.     }
  126.     
  127.     ShowWindowStatus();
  128.  
  129.     for (i=1; PerlArgs[i]; ++i)
  130.         DisposPtr(PerlArgs[i]);
  131.  
  132.     switch (PerlQuit) {
  133.     case 2:
  134. #ifdef RUNTIME
  135.     case 1:
  136. #endif
  137.         gQuitting = true;
  138.     }
  139. }
  140.  
  141. char * AEExtractor(void * data, int index)
  142. {
  143.     DescType            type;
  144.     Size                size;
  145.     Boolean            arg;
  146.     AppleEvent *     event;
  147.     FSSpec            spec;
  148.     AEKeyword        keywd;
  149.     static AEDesc    params = {'\?\?\?\?', nil};
  150.     char *            retarg;
  151.     char *            path;
  152.     
  153.     event = (AppleEvent *) data;
  154.     
  155.     switch (index) {
  156.     case extractDone:
  157.         gRuntimeScript = nil;
  158.         
  159.         if (params.dataHandle)
  160. ÜóPÎ∞ShutDwnProcShutDownVBLProcRetraceSGDataProc,SGModalFilterProc,SGGrabProc,SGGrabCompleteProc,SGDisplayProc,SGCompressProc,SGCompressCompleteProc,SGAddFrameProc,SGTransferFrameProc,SGGrabCompressCompleteProc,SGDisplayCompressProc,VdigIntProc,SCModalFilterProc,SCModalHookProcQuickTimeComponentsPPCFilterProc,PPCCompProcPPCToolBoxMenuDefProc,MenuBarDefProc,MBarHookProc,MenuHookProcMenusOSErrProc,PtrProc,BooleanProcMacTCPCommonTypesIconActionProc,IconGetterProcIconsFileTransferDefProc,FileTransferReadProc,FileTransferWriteProc,FileTransferSendProc,FileTransferReceiveProc,FileTransferEnvironsProc,FileTransferNotificationProc,FileTransferChooseIdleProcFileTransfersGetSpecificFilterProcEPPCENETCompletionProc,ENETCompletionProcENETControlDefProc,ControlActionProcControlsComponentRoutineProcComponentsTipFunctionProcBalloonsATalkTransitionEventProc,MPPCompletionProc,ATPCompletionProc,XPPCompletionProc,AttnRoutineProc,MPPProtocolHandlerProc,DDPSocketListenerProc,MPPProtocolHandlerProc,DDPSocketListenerProcAppleTalkMatchAliasFilterProcAliasesOSLAccessorProc,OSLCompareProc,OSLCountProc,OSLDisposeTokenProc,OSLGetMarkTokenProc,OSLGetErrDescProc,OSLMarkProc,OSLAdjustMarksProcAEObjectsADSPConnectionEventProc,ADSPConnectionEventProc,ADSPCompletionProcADSPFÚ…æsh¯Ãæ~w
  161. Ù
  162. Ì
  163. ì
  164. ã
  165. K
  166. E
  167. 8
  168. 3
  169. 
  170. Ù ‰ é â ] W 6 .   S G A >
  171. 
  172. Â
  173. ÷
  174. Œ
  175. §    ≥    ™    †    õ    â    Ñ    :    0        ™•Ñ{◊œ›ÿ∑%∑êòTfi}≥∏
  176. qI"qIFqH¸lqHÙîqH¯√}Øt}≠ÙN}≠‰s}¨‘±,†}≥ò!+x=+<Y}¨¥}ƨ}Ø}Ø}Ø}Üá–Ά f†Directory "tyrathect:Development:Others:Pathologist" > "{ShellDirectory}"MPW.Errors ≥ Dev:StdOut              || Alert < "{ShellDirectory}"MPW.ErrorstÜà`Î0 iÃ}±Ñ}±Ä+\ÜâÎ0 j`}≤(}≤+\Üâ0Î
  177.   k0
  178. ÇÜâ`Î0ËqHîqHåqHàˇˇqHÑ∂€m∂ÜâÄο dà(Get {headerStyle} -m -d Help -k "MacApp411CPlusHelp" -width 60 -dfl "{HelpDirectory}"Help_Files || (beep ;)) ∑∑ "{HelpDirectory}"Help; Open "{HelpDirectory}"Help;€m∂€m∂€m∂€m∂Üâ∞Î @ hT}∞8}∫∞ScDˇˆ≥àl}ظ}∞∂€m∂€m∂ÜäpÎp k»}≥Lh |qOK}≥T∞¿rà}≥t
  179. \rà}≥`∞x¿⁄àh |qÄÅäůÜä∞Î0qH¨qH§qH†ˇˇqHúˇˇˇˇˇˇˇˇ∂€m∂Üã Î0 e§Mount Project…/µå©@´  e§ÜãPΠ`|¿0?ˇˇˇ˛Å˛Å˛A¸A¸!¯¿¿?¯¸¸ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛¸¸?¯¿m∂€m∂€m∂€m∂€ÜãÄΠ hú
  180. Äġˇm∂Ç0`Üã‡Î P iÿ}±òÅ¿¿*ı>tˇàdShow Invisibles∂€m∂€m∂€ÜåΠ` gÿ Undo    "{active}"Cut   § "{active}"Copy  § "{active}"Paste § "{active}"Clear    § "{active}"help `catenate "{active}.§"`Beep/CheckWindowIn "{Active}" && Close -c "{Active}"CheckWindowOut "{Active}"èFind \•@\:/•∞/ "{Active}"; Justify -r 80 "{Active}".§>"{MPW}"MPW.Justify; Catenate "{MPW}"MPW.Justify > "{Active}".§; Delete "{MPW}"MPW.JustifyrBegin; Find \•[ ∂t]*File\ "{Worksheet}"; Find !0 "{Worksheet}UDPNotifyProc,UDPIOCompletionProcUDPPBTSMTEPreUpdateProc,TSMTEPostUpdateProcTSMTETimerProcTimerHighHookProc,CaretHookProc,EOLHookProc,WidthHookProc,NWidthHookProc,TextWidthHookProc,DrawHookProc,HitTestHookProc,TEFindWordProc,TERecalcProc,TEDoTextProc,WordBreakProc,TEClickLoopProcTextEditTerminalSendProc,TerminalBreakProc,TerminalCacheProc,TerminalSearchCallBackProc,TerminalClikLoopProc,TerminalEnvironsProc,TerminalChooseIdleProc,TerminalToolDefProcTerminalsTCPNotifyProc,TCPIOCompletionProcTCPPBDlgHookProc,FileFilterProc,DlgHookYDProc,ModalFilterYDProc,FileFilterYDProc,ActivateYDProcStandardFileSIInterruptProc,SICompletionProcSoundInputSndCompletionProc,SndCallBackProc,FilePlayCompletionProc,SndDoubleBackProcSoundSlotIntServiceProcSlotsResErrProcResourcesQDTextProc,QDLineProc,QDRectProc,QDRRectProc,QDOvalProc,QDArcProc,QDPolyProc,QDRgnProc,QDBitsProc,QDCommentProc,QDTxMeasProc,QDGetPicProc,QDPutPicProc,QDOpcodeProc,QDJShieldCursorProc,ColorSearchProc,ColorComplementProc,DeviceLoopDrawingProcQuickdrawPrIdleProc,PItemProc,PDlgInitProcPrintingSleepQProcPowerDeferredTaskProc,DeferredTaskProcOSUtilsOSACreateAppleEventProc,OSASendProc,OSAActiveProcOSANMProcNotificationMovieRgnCoverProc,MovieProgressProc,MovieDrawingCompleteProc,TrackTransferProc,QTCallBackProc,MoviePreviewCallOutProc,MoviesErrorProc,TextMediaProc,MCActionFilterProc,MCActionFilterWithRefConProcMoviesICMPEchoNotifyProcMiscIPPBGrowZoneProc,PurgeProc,UserFnProcMemoryListSearchProc,ListClickLoopProc,ListDefProcListsICMDataProc,ICMFlushProc,ICMCompletionProc,ICMProgressProc,StdPixProc,ICMAlignmentProcImageCompressionSelectorFunctionProcGestaltEquIOCompletionProc,IOCompletionProcFilesGNEFilterProcEventsExpModalFilterProc,ExpDlgHookProc,FormatIOProc,EditionOpenerProcEditionsDMNotificationProcDisplaysSoundProc,ModalFilterProc,UserItemProcDialogsControlPanelDefProcDevicesADBCompletionProc,ADBDeviceDriverProc,ADBServiceRoutineProc,ADBInitProc,ADBCompletionProc,ADBDeviceDriverProc,ADBServiceRoutineProcDeskBusDBCompletionProc,DBQueryDefProc,DBStatusProc,DBResultHandlerProcDatabaseAccessDialogHookProc,NameFilterProc,ZoneFilterProcCTBUtilitiesConnectionToolDefProc,ConnectionSearchCallBackProc,ConnectionCompletionProc,ConnectionChooseIdleProcConnectionsAEIdleProc,AEFilterProc,AEEventHandlerProc,AECoerceDescProc,AECoercePtrProcAppleEventsEnumResultProc,ResultProc,ResultProc2ProcAddressXlationˇˇˇ˝ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ